package com.ruoyi.system.mapper;

import com.ruoyi.system.domain.SysRefreshToken;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * Refresh Token Mapper接口
 *
 * @author ruoyi
 */
public interface SysRefreshTokenMapper
{
    /**
     * 查询Refresh Token
     *
     * @param id Refresh Token主键
     * @return Refresh Token
     */
    public SysRefreshToken selectSysRefreshTokenById(Long id);

    /**
     * 根据用户ID查询Refresh Token
     *
     * @param userId 用户ID
     * @return Refresh Token
     */
    public SysRefreshToken selectSysRefreshTokenByUserId(Long userId);

    /**
     * 根据token值查询Refresh Token
     *
     * @param refreshToken token值
     * @return Refresh Token
     */
    public SysRefreshToken selectSysRefreshTokenByToken(String refreshToken);

    /**
     * 查询Refresh Token列表
     *
     * @param sysRefreshToken Refresh Token
     * @return Refresh Token集合
     */
    public List<SysRefreshToken> selectSysRefreshTokenList(SysRefreshToken sysRefreshToken);

    /**
     * 新增Refresh Token
     *
     * @param sysRefreshToken Refresh Token
     * @return 结果
     */
    public int insertSysRefreshToken(SysRefreshToken sysRefreshToken);

    /**
     * 修改Refresh Token
     *
     * @param sysRefreshToken Refresh Token
     * @return 结果
     */
    public int updateSysRefreshToken(SysRefreshToken sysRefreshToken);

    /**
     * 删除Refresh Token
     *
     * @param id Refresh Token主键
     * @return 结果
     */
    public int deleteSysRefreshTokenById(Long id);

    /**
     * 批量删除Refresh Token
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSysRefreshTokenByIds(Long[] ids);

    /**
     * 保存或更新用户的Refresh Token
     *
     * @param userId 用户ID
     * @param refreshToken token值
     * @param expiresAt 过期时间
     * @return 结果
     */
    public int saveOrUpdateRefreshToken(@Param("userId") Long userId,
                                        @Param("refreshToken") String refreshToken,
                                        @Param("expiresAt") Date expiresAt);

    /**
     * 使用户的所有Refresh Token失效
     *
     * @param userId 用户ID
     * @return 结果
     */
    public int invalidateUserRefreshTokens(Long userId);

    /**
     * 删除过期的Refresh Token
     *
     * @return 结果
     */
    public int deleteExpiredRefreshTokens();

    /**
     * 验证Refresh Token是否有效
     *
     * @param userId 用户ID
     * @param refreshToken token值
     * @return 有效的Refresh Token记录
     */
    public SysRefreshToken validateRefreshToken(@Param("userId") Long userId,
                                                @Param("refreshToken") String refreshToken);
}